Avoid drawing one too many frames. (#107398, Owen Taylor, Miguel Gomez)
authorMatthias Clasen <mclasen@redhat.com>
Wed, 21 Nov 2007 04:56:50 +0000 (04:56 +0000)
committerMatthias Clasen <matthiasc@src.gnome.org>
Wed, 21 Nov 2007 04:56:50 +0000 (04:56 +0000)
2007-11-20  Matthias Clasen  <mclasen@redhat.com>

        * gtk/gtkimage.c (animation_timeout): Avoid drawing one too many
        frames.  (#107398, Owen Taylor, Miguel Gomez)

svn path=/trunk/; revision=19017

ChangeLog
gtk/gtkimage.c

index 3e59bbcf784da4a1b0e1c36d91f89516c3984edc..0de9e60913c7564f1763618c1fb1e9080d1f1f94 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2007-11-20  Matthias Clasen  <mclasen@redhat.com>
+
+       * gtk/gtkimage.c (animation_timeout): Avoid drawing one too many
+       frames.  (#107398, Owen Taylor, Miguel Gomez)
+
 Tue Nov 20 15:19:42 2007 +0100 Tim Janik
 
        Moved Gdk test functions from Gtk+ to Gdk test utils.
index a4012b90e5768fd2196dc686814a6cd529e97432..43c442613da77ff5d67791b69cf78e09495c13ce 100644 (file)
@@ -1342,6 +1342,7 @@ static gint
 animation_timeout (gpointer data)
 {
   GtkImage *image;
+  int delay;
 
   image = GTK_IMAGE (data);
   
@@ -1349,16 +1350,17 @@ animation_timeout (gpointer data)
 
   gdk_pixbuf_animation_iter_advance (image->data.anim.iter, NULL);
 
-  if (gdk_pixbuf_animation_iter_get_delay_time (image->data.anim.iter) >= 0)
-    image->data.anim.frame_timeout =
-      gdk_threads_add_timeout (gdk_pixbuf_animation_iter_get_delay_time (image->data.anim.iter),
-                     animation_timeout,
-                     image);
+  delay = gdk_pixbuf_animation_iter_get_delay_time (image->data.anim.iter);
+  if (delay >= 0)
+    {
+      image->data.anim.frame_timeout =
+        gdk_threads_add_timeout (delay, animation_timeout, image);
 
-  gtk_widget_queue_draw (GTK_WIDGET (image));
+      gtk_widget_queue_draw (GTK_WIDGET (image));
 
-  if (GTK_WIDGET_DRAWABLE (image))
-    gdk_window_process_updates (GTK_WIDGET (image)->window, TRUE);
+      if (GTK_WIDGET_DRAWABLE (image))
+        gdk_window_process_updates (GTK_WIDGET (image)->window, TRUE);
+    }
 
   return FALSE;
 }